//
// Created by Tiany on 2021/6/22.
//

#include "LinkQueue.h"
#include "stdio.h"
#include "stdlib.h"

//创建空队列
PLinkQueue createEmptyQueue_link(void) {
    PLinkQueue pLinkQueue = malloc(sizeof(struct LinkQueue));
    if (pLinkQueue != NULL) {
        pLinkQueue->f = NULL;
        pLinkQueue->r = NULL;
    } else printf("空间分配失败");
    return pLinkQueue;
}

//判断队列是否为空
int isEmptyQueue_link(PLinkQueue pLinkQueue) {
    return (pLinkQueue->f == NULL);
}

//入队
void enQueue_link(PLinkQueue pLinkQueue, struct DataType x) {
    PNode pNode;
    pNode = malloc(sizeof(struct Node));
    if (pNode != NULL) {
        pNode->info.n = x.n;
        pNode->link = NULL;
        if (isEmptyQueue_link(pLinkQueue))
            pLinkQueue->f = pNode;/*插入前，队列为空*/
        else pLinkQueue->r->link = pNode;/*将新结点插入，即与队尾连接起来*/
        pLinkQueue->r = pNode;/*修改队尾指针*/
    }
}

//出队
void deQueue_link(PLinkQueue pLinkQueue) {
    PNode pNode;
    if (isEmptyQueue_link(pLinkQueue))
        printf("空队列");
    else {
        pNode = pLinkQueue->f;/*记录即将出队的结点，用于释放内存*/
        pLinkQueue->f = pNode->link;/*对头指针后移*/
        free(pNode);/*释放出队结点*/
    }
}

//取队列的头元素
struct DataType frontQueue_link(PLinkQueue pLinkQueue) {
    if (isEmptyQueue_link(pLinkQueue))
        printf("队列为空");
    else return (pLinkQueue->f->info);
}

//数据写入队列
void writeInQueue_link(PLinkQueue pLinkQueue, struct DataType x[], int length) {
    if (pLinkQueue != NULL) {
        for (int i = 0;i<length; i++) {
           // if ()break;
            enQueue_link(pLinkQueue, x[i]);
        }
    } else printf("队列不存在");
}

//读出队列所以元素
void readAllQueue_link(PLinkQueue pLinkQueue) {
    if (!isEmptyQueue_link(pLinkQueue)) {
        PNode pNode = pLinkQueue->f;
        while (pNode !=pLinkQueue->r->link) {
            printf("%d  ", pNode->info.n);
            pNode = pNode->link;
        }
    }


}

